-
Notifications
You must be signed in to change notification settings - Fork 13.9k
minimal dirfd implementation (1/4) #146341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
c3278f6 to
6982a46
Compare
This comment has been minimized.
This comment has been minimized.
6982a46 to
313c731
Compare
This comment has been minimized.
This comment has been minimized.
313c731 to
1b3d7d6
Compare
This comment has been minimized.
This comment has been minimized.
1b3d7d6 to
be0d761
Compare
|
@ChrisDenton I'll need your help for the Windows review |
be0d761 to
3083d58
Compare
|
@rustbot ready |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks pretty good to me, just a few mechanical things here. There are a couple left over from the previous review, #146341 (comment), #146341 (comment), and (newly) #146341 (comment).
| let mut handle = ptr::null_mut(); | ||
| let mut io_status = c::IO_STATUS_BLOCK::PENDING; | ||
| let access = opts.get_access_mode()? | c::SYNCHRONIZE; | ||
| let options = create_options | c::FILE_SYNCHRONOUS_IO_NONALERT; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you add a note about why this flag is set?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I no longer remember why I chose this one, and looking at it now, I'm not sure whether we should set this one, FILE_SYNCHRONOUS_IO_ALERT, or neither. Maybe @ChrisDenton has thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update, using neither causes an error, so I've added back FILE_SYNCHRONOUS_IO_NONALERT
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, passing this flag is equivalent to not passing FILE_FLAG_OVERLAPPED to CreateFile. So if you don't pass this flag, other APIs using the handle need to follow the usual overlapped rules, otherwise they may behave improperly.
|
From the top post:
I think it would be fine to include the
That is quite alright, there is no hurry :) For reference, the |
This comment was marked as outdated.
This comment was marked as outdated.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc* try-job: x86_64-mingw
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc* try-job: x86_64-mingw*
|
Reminder, once the PR becomes ready for a review, use |
18a93b3 to
70ea0df
Compare
This comment has been minimized.
This comment has been minimized.
70ea0df to
fedd376
Compare
|
This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
fedd376 to
1624481
Compare
|
@rustbot ready |
|
@bors2 try |
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc-1 try-job: x86_64-mingw*
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
💔 Test for 7d804a8 failed: CI. Failed jobs:
|
|
I'm not quite sure what's failing here unfortunately. @neerajsi-msft do you have any ideas? The failure was in the @rustbot author |
I'll try to repro locally and take a look. |
| if path.is_absolute() { | ||
| return File::open(path, opts); | ||
| } | ||
| let path = to_u16s(path)?; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to_u16s produces a null-terminated path whereas kernel paths treat nulls literally rather than as a terminator (much like rust strings). I believe this is what's causing the test to fail.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I debugged this locally and Chris Denton is right. The NULL terminator is causing a problem.
1624481 to
1479928
Compare
|
Looks like I need a try job to see if the error still exists. |
|
@Qelxiros: 🔑 Insufficient privileges: not in try users |
|
@bors2 try |
This comment has been minimized.
This comment has been minimized.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc-1 try-job: x86_64-mingw*
|
@rustbot ready |
This is the first of four smaller PRs that will eventually be equivalent to #139514.
A few notes:
newtoopenbecauseopen_dirtakes&selfand opens a subdirectory.opentoopen_file.impl AsRawFdand friends because thecommonimplementation usesPathBufs. How should I proceed here?The other PRs will be based on this one, so I'll make drafts and mark them ready as their predecessors get merged. They might take a bit though; I've never done this particular thing with git before.
Tracking issue: #120426
r? @tgross35
try-job: aarch64-apple
try-job: dist-various*
try-job: test-various*
try-job: x86_64-msvc-1
try-job: x86_64-mingw*